package com.asa.cg;

import java.util.LinkedList;
import java.util.List;

public class D {
	
	/**
	 * 	实战中用arthas进行调优
	 * 
	 * 	启动程序
	 * java -jar arthas-boot.jar
	 * 	此时它会将你所有在java上运行的程序打印出来，并标号
	 * 	输入你要监测的程序的标号，就挂载上去了
	 * 
	 * 	dashboard	查看仪表盘
	 * 	
	 * 	jvm 	查看jvm信息
	 * 	
	 * 	thread		查看当前线程列表
	 * 	
	 * 	thread 15 	查看指定号码的线程号
	 * 
	 * 	thread | grep main 查看指定分组的线程
	 * 
	 * 	thread -b 查看死锁的线程
	 * 
	 * 
	 * 	sm "com.asa"	查看某个包下的方法
	 * 
	 * 
	 * 	trace	跟踪执行时间
	 * 
	 * 	monitor		跟踪方法输入的值和返回
	 * 
	 * 
	 * 	heapdown --live /tmp/dump.hprof	把堆导出到一个文件里
	 * 	jvisualvm.exe是可以图形化界面在本地解析文件的
	 * 
	 * 	jad com.asa.c		反编译并打印出来
	 * 	
	 * 	redefine	可以直接修改源码，放入内存，不惊动线下代码（应急用的）
	 * 
	 * 	
	 * 
	 */
	
	
	
	/**
	 * 	设置GC的日志
	 * 
	 * 	-Xloggc:/opt/xxx/logs/xxx-xxx-gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=20M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCCause
	 * 
	 */
	
	
	/**
	 * 	jps		查看进程号
	 * 	jmap -histo 2310	分析内存用的，可以查看出那些对象在占用内存
	 * 	jmap -histo 2310 | head -20	限制输出数量
	 * 
	 * jmap如果在堆内存比较大的时候执行，会暂停线程（部分工作场景不允许暂停的）
	 * 
	 * 
	 * jmap是在Linux上面的
	 */
	
	
	/**
	 * GC算法细节说明
	 * 
	 * CMS	三色标记，虽然做了很多优化，但由于时空的问题还是会出现漏标，导致必须在cg阶段要重新扫描所有的对象，导致慢，所以java1.9是直接被淘汰了
	 * G1	SATB Snapshot At the Begining	开始快照，在要cg时，看有没有对象指向它，之后也不会维护它了
	 * 
	 * ZGC and Shenandoah的解决方案：Colored Pointers 涉及到操作系统与内存映射的概念，很牛逼，可以管理4T
	 * 		为什么是4T呢？因为 18 + 4 + 42，这里18指使用的地址，4指4个状态，而42就是指对象地址，而2的42次方，就是4T了
	 * 
	 * 
	 */
	
	

}
